﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

//********************************************************
//
//                          Week 5
//
//********************************************************
// Auteur: Mathijs Kuijl
// 

namespace THO7AlgoritmTimerApplication {
    class MapImage : VisionAlgorithm {
        public MapImage(String name) : base(name) { }
        public override Bitmap DoAlgorithm(Bitmap sourceImage) {

            Bitmap bmpSrc = (Bitmap)sourceImage.Clone();
            BitmapData bmpdata = sourceImage.LockBits(new Rectangle(0, 0, sourceImage.Width, sourceImage.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            IntPtr ptr = bmpdata.Scan0;

            int regellengte = Math.Abs(bmpdata.Stride);
            int bytes = regellengte * sourceImage.Height;
            byte[] rgbValues = new byte[bytes];
            System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
            int teller = 0;
            StreamWriter writer = new StreamWriter("C:\\Users\\Acer\\Desktop\\Data.txt",true);
            int pixel;
            List<String> inputRegel = new List<String>();

            //Voor de gui.
            string letter = null;
            //letter = getLetter();

            // Deze haalt de letter op die ingevult is in de gui.
            // maar in sommige versies is dat niet in de gui geimplementeerd. Daarom wordt
            // deze zin uit voorzorg uitgecommentarieerd
            if (letter == null)
            {
                inputRegel.Add("Other ");
            }
            else
            {
                inputRegel.Add(getLetter() + " ");
            }
            //Check1
            for (int convolutie = 0; convolutie < regellengte; convolutie +=3)
            {
                for (int regelnummer = 0; regelnummer < sourceImage.Height - 1; regelnummer++)
                {
                    pixel = (regelnummer * regellengte) + convolutie;
                    if (rgbValues[pixel] < 25 && rgbValues[pixel + 1] < 25 && rgbValues[pixel + 2] < 25)
                    {
                        break; //stop met zoeken als een "zwarte" is gevonden.
                    }
                    teller++; // tel het aantal stapjes
                }
                inputRegel.Add(teller + " "); 
                teller = 0;
            }
            //Check2
            for (int convolutie = regellengte; 0 < convolutie; convolutie -= 3)
            {
                for (int regelnummer = sourceImage.Height; 0 < regelnummer; regelnummer--)
                {
                    pixel = (regelnummer * regellengte) - convolutie;
                    if (rgbValues[pixel] < 25 && rgbValues[pixel - 1] < 25 && rgbValues[pixel - 2] < 25)
                    {
                        break;
                    }
                    teller++;
                }
                inputRegel.Add(teller + " ");
                teller = 0;
            }

            //voeg alle data in een string.
            string UpDownCo = "";
            for (int i = 0; i < inputRegel.Count; i++)
            {
                UpDownCo += inputRegel[i];
            }
            writer.WriteLine(UpDownCo);

            writer.Close();
            sourceImage.UnlockBits(bmpdata);
            return sourceImage;
        }
    }
}
